:art: IsolationPointUserInfo.temperature

huangqimin001 vor 3 Jahren
Ursprung
Commit
aa768d80b7
4 geänderte Dateien mit 95 neuen Zeilen und 55 gelöschten Zeilen
  1. 65 54
      api/eqpt_views.py
  2. 1 1
      equipment/admin.py
  3. 18 0
      equipment/migrations/0013_isolationpointuserinfo_temperature.py
  4. 11 0
      equipment/models.py

+ 65 - 54
api/eqpt_views.py

@@ -5,7 +5,7 @@ from __future__ import division
5 5
 import json
6 6
 
7 7
 from django.conf import settings
8
-from django.db.models import Q
8
+from django.db.models import Max, Q
9 9
 from django_logit import logit
10 10
 from django_query import get_query_value
11 11
 from django_response import response
@@ -16,7 +16,6 @@ from equipment.models import (IsolationPointInfo, IsolationPointUserInfo, Thermo
16 16
                               ThermometerMeasureInfo, ThermometerMeasureLogInfo)
17 17
 from utils.error.errno_utils import IsolationPointStatusCode, ThermometerEquipmentStatusCode
18 18
 from utils.redis.rscreen import get_screen_info, set_screen_info
19
-from utils.redis.rtemperature import get_old_temperature, set_old_temperature
20 19
 
21 20
 
22 21
 @logit
@@ -209,36 +208,43 @@ def get_screen_data(point=None, point_id=None):
209 208
             return {}
210 209
 
211 210
     eqpts = ThermometerEquipmentInfo.objects.filter(point_id=point.point_id, active_status=ThermometerEquipmentInfo.ONLINE, status=True)
212
-    macids = eqpts.values_list('macid', flat=True)
213
-
214
-    logs = ThermometerMeasureInfo.objects.filter(
215
-        point_id=point.point_id,
216
-        point_measure_ymd=tc.local_string(format='%Y-%m-%d'),
217
-        point_measure_window=point.previous_measure_window,
218
-        macid__in=macids,
219
-        status=True,
220
-    ).values('macid', 'temperature', 'updated_at')
221
-    temperature_logs = {log.get('macid'): log.get('temperature') for log in logs}
222
-    time_logs = {log.get('macid'): tc.local_string(utc_dt=log.get('updated_at'), format='%m-%d %H:%M') for log in logs}
211
+    # macids = eqpts.values_list('macid', flat=True)
212
+    #
213
+    # logs = ThermometerMeasureInfo.objects.filter(
214
+    #     point_id=point.point_id,
215
+    #     point_measure_ymd=tc.local_string(format='%Y-%m-%d'),
216
+    #     point_measure_window=point.previous_measure_window,
217
+    #     macid__in=macids,
218
+    #     status=True,
219
+    # ).values('macid', 'temperature', 'updated_at')
220
+    # temperature_logs = {log.get('macid'): log.get('temperature') for log in logs}
221
+    # time_logs = {log.get('macid'): tc.local_string(utc_dt=log.get('updated_at'), format='%m-%d %H:%M') for log in logs}
223 222
 
224 223
     ipuis = IsolationPointUserInfo.objects.filter(point_id=point.point_id, status=True)
225 224
     ipuis = [ipui.data for ipui in ipuis]
225
+
226
+    total_active_eqpt_num = eqpts.count()
227
+    # has_upload_temperature_num = len(temperature_logs)
228
+    # fever_num = len([1 for temperature in temperature_logs.values() if temperature > settings.FEVER_TEMPERATURE])
229
+    has_upload_temperature_num = len([1 for ipui in ipuis if ipui.get('temperature_has_upload', '') == '已上报'])
230
+    fever_num = len([1 for ipui in ipuis if ipui.get('temperature', 0) > settings.FEVER_TEMPERATURE])
231
+
226 232
     # ipuis_fields = {info.get('pk'): info.get('fields') for info in ipuis}
227 233
     # ipuis_observed_days = {info.get('pk'): info.get('observed_days') for info in ipuis}
228 234
     ipuis = {ipui.get('pk'): {
229 235
         'fields': ipui.get('fields'),
230 236
         'observed_days': ipui.get('observed_days'),
237
+        'temperature_has_upload': ipui.get('temperature_has_upload'),
238
+        'temperature': ipui.get('temperature'),
231 239
         'last_submit_at': ipui.get('last_submit_at'),
232 240
         'remark': ipui.get('remark'),
233 241
     } for ipui in ipuis}
234 242
 
235
-    total_active_eqpt_num = eqpts.count()
236
-    has_upload_temperature_num = len(temperature_logs)
237
-    fever_num = len([1 for temperature in temperature_logs.values() if temperature > settings.FEVER_TEMPERATURE])
238
-
239 243
     eqpts = [{**eqpt.screen_data, **{
240
-        'has_upload': eqpt.macid in temperature_logs,
241
-        'temperature': temperature_logs.get(eqpt.macid, 0),
244
+        # 'has_upload': eqpt.macid in temperature_logs,
245
+        # 'temperature': temperature_logs.get(eqpt.macid, 0),
246
+        'has_upload': ipuis.get(eqpt.ipui_pk, {}).get('temperature_has_upload', 0),
247
+        'temperature': ipuis.get(eqpt.ipui_pk, {}).get('temperature', 0),
242 248
         'observed_days': ipuis.get(eqpt.ipui_pk, {}).get('observed_days', 0),
243 249
         'last_submit_at': ipuis.get(eqpt.ipui_pk, {}).get('last_submit_at', ''),
244 250
         'remark': ipuis.get(eqpt.ipui_pk, {}).get('remark', ''),
@@ -251,25 +257,18 @@ def get_screen_data(point=None, point_id=None):
251 257
         'content': eqpt.get('remark'),
252 258
     } for eqpt in eqpts if eqpt.get('remark')]
253 259
 
254
-    # var name: String = ""
255
-    # var room: String = ""
256
-    # var phone: String = ""
257
-    # var sex: String = ""
258
-    # var age: String = ""
259
-    # var temperature: String = ""
260
-    # var status: String = ""
261
-    # var remind: String = ""
262
-    # var last_report_time: String = ""
263
-    # var observed_days: String = ""
264 260
     eqpts = [{
265 261
         'name': eqpt.get('name', ''),
266 262
         'room': eqpt.get('room', ''),
267 263
         'phone': eqpt.get('phone', ''),
268 264
         'sex': eqpt.get('sex', ''),
269 265
         'age': eqpt.get('age', ''),
270
-        'status': '已上报' if eqpt.get('temperature') else '未上报',
271
-        'last_report_time': time_logs.get(eqpt.get('macid', ''), '') if eqpt.get('temperature') else eqpt.get('last_submit_at', ''),
272
-        'temperature': eqpt.get('temperature', '') or get_old_temperature(eqpt.get('point_id', ''), eqpt.get('macid', '')),
266
+        'status': eqpt.get('has_upload'),
267
+        # 'status': '已上报' if eqpt.get('temperature') else '未上报',
268
+        'last_report_time': eqpt.get('last_submit_at', ''),
269
+        # 'last_report_time': time_logs.get(eqpt.get('macid', ''), '') if eqpt.get('temperature') else eqpt.get('last_submit_at', ''),
270
+        'temperature': eqpt.get('temperature', 0),
271
+        # 'temperature': eqpt.get('temperature', '') or get_old_temperature(eqpt.get('point_id', ''), eqpt.get('macid', '')),
273 272
         'observed_days': eqpt.get('observed_days', 0),
274 273
     } for eqpt in eqpts]
275 274
 
@@ -400,32 +399,44 @@ def mqtt_upload_temperature(payload):
400 399
     except IsolationPointInfo.DoesNotExist:
401 400
         return
402 401
 
403
-    point_measure_ymd = tc.local_string(format='%Y-%m-%d')
402
+    # point_measure_ymd = tc.local_string(format='%Y-%m-%d')
404 403
 
405
-    point_measure_window = point.current_measure_window
406
-    eqpt.last_submit_at = tc.utc_datetime()
407
-    eqpt.save()
404
+    # point_measure_window = point.current_measure_window
405
+    # eqpt.last_submit_at = tc.utc_datetime()
406
+    # eqpt.save()
408 407
 
409 408
     ThermometerMeasureLogInfo.objects.create(point_id=eqpt.point_id, macid=macid, start_stamp=start_stamp, end_stamp=end_stamp, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MQTT, upload_temperature_info=payload)
410 409
 
411
-    if point_measure_window:
412
-        measure_info, _ = ThermometerMeasureInfo.objects.get_or_create(point_id=eqpt.point_id, point_measure_ymd=point_measure_ymd, point_measure_window=point_measure_window, macid=macid, defaults={
413
-            'temperature': temperature,
414
-        })
415
-        if temperature > measure_info.temperature:
416
-            measure_info.temperature = temperature
417
-            measure_info.save()
418
-
419
-            set_old_temperature(eqpt.point_id, macid, temperature)
410
+    # if point_measure_window:
411
+    #     measure_info, _ = ThermometerMeasureInfo.objects.get_or_create(point_id=eqpt.point_id, point_measure_ymd=point_measure_ymd, point_measure_window=point_measure_window, macid=macid, defaults={
412
+    #         'temperature': temperature,
413
+    #     })
414
+    #     if temperature > measure_info.temperature:
415
+    #         measure_info.temperature = temperature
416
+    #         measure_info.save()
417
+    #
418
+    #         set_old_temperature(eqpt.point_id, macid, temperature)
419
+    #
420
+    #     try:
421
+    #         ipui = IsolationPointUserInfo.objects.get(pk=eqpt.ipui_pk)
422
+    #     except IsolationPointUserInfo.DoesNotExist:
423
+    #         ipui = None
424
+    #     if ipui:
425
+    #         ipui.observed_ymds = list(set(ipui.observed_ymds + [point_measure_ymd]))
426
+    #         ipui.observed_days = len(ipui.observed_ymds)
427
+    #         ipui.last_submit_at = tc.utc_datetime()
428
+    #         ipui.save()
420 429
 
421
-        try:
422
-            ipui = IsolationPointUserInfo.objects.get(pk=eqpt.ipui_pk)
423
-        except IsolationPointUserInfo.DoesNotExist:
424
-            ipui = None
425
-        if ipui:
426
-            ipui.observed_ymds = list(set(ipui.observed_ymds + [point_measure_ymd]))
427
-            ipui.observed_days = len(ipui.observed_ymds)
428
-            ipui.last_submit_at = tc.utc_datetime()
429
-            ipui.save()
430
+    try:
431
+        ipui = IsolationPointUserInfo.objects.get(pk=eqpt.ipui_pk)
432
+    except IsolationPointUserInfo.DoesNotExist:
433
+        ipui = None
434
+    if ipui:
435
+        temperature__max = ThermometerMeasureLogInfo.objects.filter(point_id=eqpt.point_id, macid=macid).aggregate(Max('temperature')).get('temperature__max') or 0
436
+        ipui.observed_ymds = list(set(ipui.observed_ymds + [tc.local_string(format='%Y-%m-%d')]))
437
+        ipui.observed_days = len(ipui.observed_ymds)
438
+        ipui.temperature = temperature__max
439
+        ipui.last_submit_at = tc.utc_datetime()
440
+        ipui.save()
430 441
 
431 442
     set_screen_info(point.point_id, get_screen_data(point))

+ 1 - 1
equipment/admin.py

@@ -16,7 +16,7 @@ class IsolationPointInfoAdmin(admin.ModelAdmin):
16 16
 
17 17
 
18 18
 class IsolationPointUserInfoAdmin(admin.ModelAdmin):
19
-    list_display = ('point_id', 'user_id', 'fields', 'observed_days', 'last_submit_at', 'leave_at', 'status', 'updated_at', 'created_at')
19
+    list_display = ('point_id', 'user_id', 'fields', 'observed_days', 'temperature', 'last_submit_at', 'leave_at', 'status', 'updated_at', 'created_at')
20 20
 
21 21
 
22 22
 class ThermometerEquipmentInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):

+ 18 - 0
equipment/migrations/0013_isolationpointuserinfo_temperature.py

@@ -0,0 +1,18 @@
1
+# Generated by Django 3.2.6 on 2021-08-17 09:56
2
+
3
+from django.db import migrations, models
4
+
5
+
6
+class Migration(migrations.Migration):
7
+
8
+    dependencies = [
9
+        ('equipment', '0012_auto_20210817_1727'),
10
+    ]
11
+
12
+    operations = [
13
+        migrations.AddField(
14
+            model_name='isolationpointuserinfo',
15
+            name='temperature',
16
+            field=models.FloatField(default=0, help_text='用户体温', verbose_name='temperature'),
17
+        ),
18
+    ]

+ 11 - 0
equipment/models.py

@@ -145,6 +145,7 @@ class IsolationPointUserInfo(BaseModelMixin):
145 145
     observed_ymds = JSONField(_('observed_ymds'), default=[], blank=True, null=True, help_text='已测温日期')
146 146
     observed_days = models.IntegerField(_('observed_days'), default=0, help_text='已测温天数')
147 147
 
148
+    temperature = models.FloatField(_('temperature'), default=0, help_text='用户体温')
148 149
     last_submit_at = models.DateTimeField(_('last_submit_at'), blank=True, null=True, help_text='上一次上报时间')
149 150
     leave_at = models.DateTimeField(_('leave_at'), blank=True, null=True, help_text='离开时间')
150 151
 
@@ -163,6 +164,14 @@ class IsolationPointUserInfo(BaseModelMixin):
163 164
         return self.pk
164 165
 
165 166
     @property
167
+    def temperature_has_upload(self):
168
+        if not self.last_submit_at:
169
+            return '未上报'
170
+        if self.last_submit_at > tc.utc_datetime(hours=-1):
171
+            return '已上报'
172
+        return '未上报'
173
+
174
+    @property
166 175
     def data(self):
167 176
         return {
168 177
             'pk': self.pk,
@@ -170,6 +179,8 @@ class IsolationPointUserInfo(BaseModelMixin):
170 179
             'user_id': self.user_id,
171 180
             'fields': self.fields,
172 181
             'observed_days': self.observed_days,
182
+            'temperature_has_upload': self.temperature_has_upload,
183
+            'temperature': self.temperature,
173 184
             'last_submit_at': tc.local_string(utc_dt=self.last_submit_at, format='%m-%d %H:%M') if self.last_submit_at else '',
174 185
             'remark': self.remark,
175 186
         }